package exam.jingdong;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 服务a启动后服务b会启动，b停止的时候a会停止，服务名由（1-n）来命名
 * 第一行n，q表示服务的数量和询问的数量
 * 下面的n行中，第一个整数c表示第i个服务依赖的服务数量，后面的c个整数代表它依赖的各个服务
 * 下面q行，每行两个空格隔开的整数x，y。x为1或者0，表示启动或者停止服务，y表示服务号
 *
 * 3 2
 * 1 2
 * 1 3
 * 0
 * 1 1
 * 0 2
 *
 * 输出
 * 3
 * 1
 */

public class test2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int q = scanner.nextInt();
        List<List<Integer>> pp = new ArrayList<>();
        List<List<Integer>> bb = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            pp.add(new ArrayList<>());
            bb.add(new ArrayList<>());
        }
        int temp = n;
        int ind = 0;
        while (temp-->0){
            int number = scanner.nextInt();
            for (int i = 0; i < number; i++) {
                int star = ind;
                int end = scanner.nextInt() - 1;
                pp.get(star).add(end);
            }
            ind++;
            }
        int[] used = new int[n];
        scanner.nextLine();
        while(q-->0){
            String str = scanner.nextLine();
            String[] arr = str.split(" ");
            int juge = -1;
            int ans = 0;
            if(arr[0].equals("1")){
                juge=1;
                for (int i = 1; i <arr.length ; i++) {
                    int cur = Integer.parseInt(arr[i])-1;
                    used[cur] = juge;
                    dfs(cur,pp,used,juge);
                }
            }else{
                juge = 0;
                for (int i = 1; i < arr.length; i++) {
                    int cur = Integer.parseInt(arr[i]) -1;
                    used[cur] = juge;
                    dfs(cur,bb,used,juge);
                }
            }
            for (int i = 0; i < used.length; i++) {
                if(used[i]==juge){
                    ans++;
                }
            }
            if(arr[0].equals("1")){
                System.out.println(ans);
            }else {
                System.out.println(n-ans);
            }

        }
    }
    public static void dfs(int st,List<List<Integer>> arr,int[] used,int juge){
        for (int i = 0; i < arr.get(st).size(); i++) {
            int cur = arr.get(st).get(i);
            if(used[cur]==juge){
                continue;
            }
            used[cur] = juge;
            dfs(cur,arr,used,juge);
        }
    }
}
